import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Fenster extends JFrame implements View{
    // Anfang Attribute
    private ZeichenPanel zeichenflaeche = new ZeichenPanel(null, true);
    private JLabel goldanzeige0 = new JLabel();
    Icon Button0= GraphicsHelper.createImageIcon("Material/Verteidiger/Ressourcensammler.png");
    private JButton turmAuswahlButton0 = new JButton(Button0);
    Icon Button1= GraphicsHelper.createImageIcon("Material/Verteidiger/Haubitze.png");
    private JButton turmAuswahlButton1 = new JButton(Button1);
    Icon Button2= GraphicsHelper.createImageIcon("Material/Verteidiger/Turm.png");
    private JButton turmAuswahlButton2 = new JButton(Button2);
    Icon Button3= GraphicsHelper.createImageIcon( "Material/Verteidiger/Raketenwerfer.png");
    private JButton turmAuswahlButton3 = new JButton(Button3);
    Icon Button4= GraphicsHelper.createImageIcon("Material/Verteidiger/Slower.png");
    private JButton turmAuswahlButton4 = new JButton(Button4);
    private JLabel textlabel0 = new JLabel();
    Controller controller;
    // Ende Attribute

    public Fenster(String title) { 
        // Frame-Initialisierung
        super(title);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        int frameWidth = 1672; 
        int frameHeight = 856;
        setSize(frameWidth, frameHeight);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width) / 2;
        int y = (d.height - getSize().height) / 2;
        setLocation(x, y);
        setResizable(false);
        Container cp = getContentPane();
   
        cp.setLayout(null);
   
        // Anfang Komponenten

        zeichenflaeche.setBounds(344, 16, 1152, 768);
        zeichenflaeche.setOpaque(true);
        cp.add(zeichenflaeche);
        goldanzeige0.setBounds(88, 16, 128, 64);
        goldanzeige0.setText("0 $");
        goldanzeige0.setOpaque(true);
        cp.add(goldanzeige0);
        turmAuswahlButton0.setBounds(88, 80, 128, 128);
        turmAuswahlButton0.setText("");
        turmAuswahlButton0.setMargin(new Insets(2, 2, 2, 2));
        turmAuswahlButton0.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    turmAuswahlButton0_ActionPerformed(evt);
                }
            });
        cp.add(turmAuswahlButton0);

        turmAuswahlButton1.setBounds(88, 208, 128, 128);
        turmAuswahlButton1.setText("");
        turmAuswahlButton1.setMargin(new Insets(2, 2, 2, 2));
        turmAuswahlButton1.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    turmAuswahlButton1_ActionPerformed(evt);
                }
            });
        cp.add(turmAuswahlButton1);
        turmAuswahlButton2.setBounds(88, 336, 128, 128);
        turmAuswahlButton2.setText("");
        turmAuswahlButton2.setMargin(new Insets(2, 2, 2, 2));
        turmAuswahlButton2.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    turmAuswahlButton2_ActionPerformed(evt);
                }
            });
        cp.add(turmAuswahlButton2);
        turmAuswahlButton3.setBounds(88, 464, 128, 128);
        turmAuswahlButton3.setText("");
        turmAuswahlButton3.setMargin(new Insets(2, 2, 2, 2));
        turmAuswahlButton3.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    turmAuswahlButton3_ActionPerformed(evt);
                }
            });
        cp.add(turmAuswahlButton3);
        turmAuswahlButton4.setBounds(88, 592, 128, 128);
        turmAuswahlButton4.setText("");
        turmAuswahlButton4.setMargin(new Insets(2, 2, 2, 2));
        turmAuswahlButton4.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    turmAuswahlButton4_ActionPerformed(evt);
                }
            });
        cp.add(turmAuswahlButton4);
        textlabel0.setBounds(88, 720, 256, 64);
        textlabel0.setText("");
        cp.add(textlabel0);
        // Ende Komponenten

        setVisible(true);
    } // end of public Fenster

    // Anfang Methoden

    public static void main(String[] args) {
        new Fenster("Fenster");
    } // end of main
    
    public void turmAuswahlButton0_ActionPerformed(ActionEvent evt) {
        controller.abwehrSetzen(1);
    } // end of turmAuswahlButton0_ActionPerformed

    public void turmAuswahlButton1_ActionPerformed(ActionEvent evt) {
        controller.abwehrSetzen(2);
        // TODO hier Quelltext einfügen
    } // end of turmAuswahlButton1_ActionPerformed

    public void turmAuswahlButton2_ActionPerformed(ActionEvent evt) {
        // TODO hier Quelltext einfügen
        controller.abwehrSetzen(3);
    } // end of turmAuswahlButton2_ActionPerformed

    public void turmAuswahlButton3_ActionPerformed(ActionEvent evt) {
        // TODO hier Quelltext einfügen
        controller.abwehrSetzen(4);
    } // end of turmAuswahlButton3_ActionPerformed

    public void turmAuswahlButton4_ActionPerformed(ActionEvent evt) {
        // TODO hier Quelltext einfügen#

        controller.abwehrSetzen(5);
    }   // end of turmAuswahlButton4_ActionPerformed



    public void button1Aendern()
    {

        ImageIcon bildneu = GraphicsHelper.createImageIcon("Material/Hintergrund.png");
        turmAuswahlButton1.setIcon(bildneu);
    }

    public void vorbereiten() 
    {
        //Tastaturabfrage hinzufuegen
        KeyboardConnection key = new KeyboardConnection(this);
        zeichenflaeche.requestFocus(); //noetig, weil zumindest 1 Element den Focus braucht, damit KeyListener anschlaegt (und das nicht im Konstruktor)
        //Bilder vorbereiten, incl tile-Breite und tile-Hoehe
        zeichenflaeche.bilderInitialisieren(128,128);
        repaint(); 
        zeichenflaeche.fensterSetzen(this);
    }    

    void setzeBildAnPosition(int x, int y, String bildname) 
    {
        zeichenflaeche.setzeBildAnPosition(x,y,bildname);
        repaint();
    }
    
    /**
	 * Aendert die auf dem JLabel angezeigten Kommentare
	 * @param  String s ist der angezeigte Kommentar
	 */
    public void kommentarAnzeigen(String s)
    /** Zeigt String s auf dem JLabel unter der Turmauswahl an  */
    {
        textlabel0.setText(s);
    }


    public void goldAnzeigen(String gold) 
    /** Zeigt String s auf dem JLabel unter der Turmauswahl an  */
    {

        goldanzeige0.setText(gold + " $");
    }


    public void controllerSetzen(Controller c) 
    /** Verbindet Controller mit View(bzw. Fenster)*/
    {

        this.controller = c;
    }

    public void hintergrundSezten()
    {
        setzeBildAnPosition(0, 0,"Material/Hintergrund_richtig.png");
    }

    public void hintergrundanPositonSetzten(int x, int y)
    {
        setzeBildAnPosition(x, y,"Material/Hintergrund.png");
    }
    
    public void hintergrundanPositonSetztenK(int y)
    {
        setzeBildAnPosition(0, y,"Material/Hintergrund_zerstoert.png");
    }

    public void verteidigerFeldSetzen(int x,int y, int abwehr)
    {
        if(abwehr==0) //Kartoffelbombe
        {
            setzeBildAnPosition(x, y, "Material/Verteidiger/Kartoffel_ohne_Back.png");
        }
        if(abwehr==1) //Geld-,Gold-,Ressourcensammler
        {
            setzeBildAnPosition(x, y, "Material/Verteidiger/Ressourcensammler.png");
        }
        if(abwehr==2) //Grundverteidiger
        {
            setzeBildAnPosition(x, y, "Material/Verteidiger/Haubitze.png");
        }

        if(abwehr==3) //Tankverteidiger
        {
            setzeBildAnPosition(x, y, "Material/Verteidiger/Turm.png"); 
        }
        if(abwehr==4) //Ninjaverteidiger
        {
            setzeBildAnPosition(x, y, "Material/Verteidiger/Raketenwerfer.png");
        }
        if(abwehr==5) //Verlangsamerungsverteidiger
        {
            setzeBildAnPosition(x, y, "Material/Verteidiger/Slower.png");
        }
    }

    public void angreiferFeldSetzen(int x,int y, int angriff)
    {
        if( angriff==-1 ) //Grundvasall
        {
            setzeBildAnPosition(x, y, "Material/Angreifer/Grundvasall.png");
        }
        if( angriff==-2 ) //Fernkampfvasall
        {
            setzeBildAnPosition(x, y, "Material/Angreifer/Rangevasall.png");
        }
        if( angriff==-3 ) //Berserkervasall
        {
            setzeBildAnPosition(x, y, "Material/Angreifer/Berserker.png"); 
        }
        if( angriff==-4 ) //Tankvasall
        {
            setzeBildAnPosition(x, y, "Material/Angreifer/Tankvasall.png");
        }
        if( angriff==-5 ) //Bossvasall
        {
            setzeBildAnPosition(x, y, "Material/Angreifer/Boss.png");
        }
    }
    


} // end of class Fenster




